package prjtgl.metier.comptes;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;
import prjtgl.bdd.comptes.interactions_utilisateur.HSignalement;
import prjtgl.metier.Application;
import prjtgl.metier.comptes.interactions_utilisateur.Signalement;

/**
 * Utilisateur
 * @author Lucie
 */

@Entity
@Inheritance(strategy= InheritanceType.JOINED)
@Table(name="utilisateur")
public class Utilisateur implements Serializable {

	public static String ADMIN = "admin";
	public static String MEMBRE = "membre";
	public static String RECRUTEUR = "recruteur";
	
	
	/**
	 * Identifiant BDD
	 */
	private long id;

	/**
	 * Email de l'utilisateur
	 */
	private String email;
	
	/**
	 * Mot de passe de l'utilisateur
	 */
	private String motDePasse;
	
	/** Role de l'utilisateur (admin, utilisateur, recruteur) */
	private String role;
	
	/**
	 * Signalements emis par l'utilisateur
	 */
	private List<Signalement> signalementsEmis;

	/**
	 * Constructeur
	 */
	public Utilisateur() {
	}
	
	/**
	 * Constructeur
	 * @param email Email
	 * @param motDePasse Mot de passe
	 */
	public Utilisateur(String email, String motDePasse){
		this.email = email;
		this.motDePasse = motDePasse;
		this.signalementsEmis = new ArrayList<Signalement>();
	}
	
	/**
	 * Signaler un membre
	 * @param membre Membre a signaler
	 * @param description Motif du signalement
	 */
	public void signalerMembre(Membre membre, String description){
            throw new UnsupportedOperationException("Not supported yet.");
            /*
		HSignalement hsignalement = new HSignalement();
                Signalement signalement = new Signalement();
                signalement.setSignalant(this);
                signalement.setSignale(membre);
                signalement.setDescription(description);
              */  
	}
	
	/**
	 * Retourne l'email de l'utilisateur
	 * @return Email de l'utilisateur
	 */
	@Column(name="email")
	public String getEmail() {
		return email;
	}

	/**
	 * Retourne l'id BDD de l'utilisateur
	 * @return 
	 */
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="id")
	public long getId() {
		return id;
	}

	/**
	 * Mutateur de l'identifiant BDD de l'utilisateur
	 * @param id Identifiant a mettre
	 */
	public void setId(long id) {
		this.id = id;
	}

	/**
	 * Mutateur de l'adresse e-mail
	 * @param email Nouvelle adresse e-mail
	 */
	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * Retourne le mot de passe de l'utilisateur
	 * @return 
	 */
	@Column(name="motdepasse")
	public String getMotDePasse() {
		return motDePasse;
	}

	/**
	 * Mutateur du mot de passe
	 * @param motDePasse Nouveau mot de passe
	 */
	public void setMotDePasse(String motDePasse) {
		this.motDePasse = motDePasse;
	}

	/**
	 * Retourne le role de l'utilisateur
	 * @return Role
	 */
	@Column(name="role")
	public String getRole() {
		return role;
	}

	/**
	 * Mutateur du role de l'utilisateur
	 * @param role Nouveau role de l'utilisateur
	 */
	public void setRole(String role) {
		this.role = role;
	}
	
	/**
	 * Verifie si le mot de passe donne en parametre correspond a celui de l'utilisateur
	 * @param value Mot de passe a verifier
	 * @return Vrai si correct, faux sinon
	 */
	public boolean verifierMotDePasse(String motDePasse) {
		return this.motDePasse.equals(motDePasse);
	}
	
	
}
